// 题目：[GESP202403 四级] 相似字符串
// 对于两个字符串A和B，如果A可以通过删除一个字符、插入一个字符、或修改一个字符变成B，则称A和B相似。
// 两个完全相同的字符串也相似。
// 输入T组A,B，判断是否相似。
// 输入格式：
// 第一行T，接下来T行每行两个字符串A B。
// 输出格式：
// 每组输出similar或not similar。
//
// 样例：
// 输入：
// 5
// apple applee
// apple appe
// apple bpple
// applee bpple
// apple apple
// 输出：
// similar
// similar
// similar
// not similar
// similar
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
// 判断A和B是否相似
bool isSimilar(const string& A, const string& B) {
    int m = A.size(), n = B.size();
    if (abs(m - n) > 1) return false; // 长度差大于1不可能相似
    if (m == n) {
        // 只允许有一个字符不同（修改）
        int diff = 0;
        for (int i = 0; i < m; ++i) {
            if (A[i] != B[i]) {
                if (++diff > 1) return false;
            }
        }
        return true;
    } else {
        // 只允许插入或删除一个字符
        const string& shorter = (m < n) ? A : B;
        const string& longer = (m < n) ? B : A;
        int i = 0, j = 0, diff = 0;
        while (i < shorter.size() && j < longer.size()) {
            if (shorter[i] != longer[j]) {
                if (++diff > 1) return false;
                ++j; // 跳过长串的当前字符
            } else {
                ++i;
                ++j;
            }
        }
        // 允许最后多一个字符
        return true;
    }
}
int main() {
    int T;
    cin >> T;
    while (T--) {
        string A, B;
        cin >> A >> B;
        if (isSimilar(A, B)) {
            cout << "similar" << endl;
        } else {
            cout << "not similar" << endl;
        }
    }
    return 0;
}

// 解题思路：
// 1. 首先判断两个字符串长度差是否大于1，若大于1则一定不相似。
// 2. 如果长度相等，只能通过“修改”操作变成对方，统计不同字符数，超过1个不同则不相似。
// 3. 如果长度差为1，只能通过“插入”或“删除”操作变成对方，双指针遍历，遇到不同跳过长串当前字符，统计不同字符数，超过1次则不相似。
// 4. 两个字符串完全相同也算相似。



// 代码详细讲解：
//
// 只允许插入或删除一个字符的情况（长度差为1）：
// 1. shorter 指向较短的字符串，longer 指向较长的字符串。
// 2. 用两个指针 i, j 分别遍历 shorter 和 longer。
// 3. 如果 shorter[i] == longer[j]，说明当前字符相同，i++, j++。
// 4. 如果 shorter[i] != longer[j]，说明有一个字符不同：
//    - 这时我们假设 longer[j] 这个字符是“多出来的”，即通过插入/删除操作可以消除这个不同。
//    - diff++，表示已经发现一次不同。
//    - 只让 j++，i 不动，表示 shorter 当前位置还没匹配上 longer 的下一个字符。
// 5. 如果 diff > 1，说明需要插入/删除超过一次，不符合题意，直接返回 false。
// 6. 循环结束后，如果 shorter 能顺利走完，或者 longer 只多一个字符，也算合法，返回 true。

//
// 代码涉及的所有情况举例：
//
// 1. 完全相同：
//    A = "apple", B = "apple"  →  输出 similar
//    （无需任何操作即可相同）
//
// 2. 只需修改一个字符：
//    A = "apple", B = "apble"  →  输出 similar
//    （只需把第3个字符p改成b）
//
// 3. 需修改两个及以上字符：
//    A = "apple", B = "apbxe"  →  输出 not similar
//    （第3个和第4个字符都不同，需两次修改）
//
// 4. 只需插入一个字符：
//    A = "aple", B = "apple"  →  输出 similar
//    （在第3个位置插入p即可）
//
// 5. 只需删除一个字符：
//    A = "applee", B = "apple"  →  输出 similar
//    （删除最后一个e即可）
//
// 6. 需插入/删除两个及以上字符：
//    A = "aple", B = "appple"  →  输出 not similar
//    （需要插入两个p）
//
// 7. 长度差大于1：
//    A = "apple", B = "appllee"  →  输出 not similar
//    （长度差2，无法一次操作变成对方）
//
// 8. 空串和单字符：
//    A = "", B = "a"  →  输出 similar
//    （插入一个a即可）
//    A = "a", B = ""  →  输出 similar
//    （删除a即可）
//    A = "", B = "ab"  →  输出 not similar
//    （长度差2）
